<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>

</body>
<script>
    // 封装一个函数 可以输出指定格式的日期和时间

    // 2022/6/13 12:36:56
    // 2022/6/13 12:36
    // 2022/6/13
    // 6-13 


    // 链式操作   => 原理: 方法的返回值还是同种类型的数据 (原本的/新的)
    // var arr = ["a","b","c"];
    // arr.concat(1,2).concat(3,4)
    // arr.reverse().reverse()

    // pattern  传入一个参数用于指定输出格式,再将对应的内容替换为指定参数
    // "YYYY-MM-DD hh:mm:ss"   
    // "2022-6-13 14:36:56"   

    // options 传入一个对象,用于配置参数  {definedDate,isBeautify} 排名不分先后
    //       definedDate
    //       isBeautify
    function formatDate(pattern, options) {
        // pattern = "YYYY-MM-DD hh:mm:ss"
        // console.log(pattern, definedDate, isBeautify);

        options = options != undefined ? options : {};


        if (options.definedDate != undefined) { // 有第二参数(自行指定时间)
            var date = new Date(options.definedDate);
        } else {
            var date = new Date();
        }

        // 有第三参数
        options.isBeautify = options.isBeautify != undefined ? options.isBeautify : true;

        var year = date.getFullYear();
        var month = date.getMonth() + 1;
        var day = date.getDate();
        var hour = date.getHours();
        var minute = date.getMinutes();
        var second = date.getSeconds();

        //返回替换后的新字符串,对原字符串没有影响 = > 把替换后的新字符串赋值给原值
        // pattern = pattern.replace("YYYY", year);
        // pattern = pattern.replace("MM", month);
        // pattern = pattern.replace("DD", day);
        // pattern = pattern.replace("hh", hour);
        // pattern = pattern.replace("mm", minute);
        // pattern = pattern.replace("ss", second);
        // 2022-6-DD hh:mm:ss 
        // console.log(pattern);


        // 返回替换后的新字符串 => 继续替换

        if (options.isBeautify) {
            pattern = pattern.replace("YYYY", year).replace("MM", beautify(month)).replace("DD", beautify(day)).replace("hh", beautify(hour)).replace("mm", beautify(minute)).replace("ss", beautify(second));
        } else {
            pattern = pattern.replace("YYYY", year).replace("MM", month).replace("DD", day).replace("hh", hour).replace("mm", minute).replace("ss", second);
        }

        return pattern;


        function beautify(num) {
            if (isNaN(num)) {
                var err = new Error("Please pass in a number");
                throw err;
            }
            return num < 10 ? "0" + num : num;
        }
    }

    // console.log(formatDate("YYYY-MM-DD hh:mm:ss"));
    // console.log(formatDate("YYYY-MM-DD hh:mm"));
    // console.log(formatDate("YYYY-MM-DD"));
    // console.log(formatDate("hh:mm:ss"));
    // console.log(formatDate("MM-DD"));


    // console.log(formatDate("YYYY-MM-DD hh:mm:ss"));
    // console.log(formatDate("YYYY-MM-DD hh:mm", "2020/12/21 15:24:36"));

    console.log(formatDate("YYYY-MM-DD hh:mm:ss"));
    console.log(formatDate("YYYY-MM-DD hh:mm:ss", {
        isBeautify: false,
    }));
    console.log(formatDate("YYYY-MM-DD hh:mm:ss", {
        definedDate: "2022-12-09 12:4:3"
        // isBeautify: false,
    }));


</script>

</html>